//泛型：任意类型
/* class Person<T>{
    emit(msg:T){
        console.log(msg);
    }
}
var p=new Person<string>();
p.emit("msg") */


//通俗理解:泛型就是解决泛类，接口，方法的复用性。以及对不特定数据类型的支持
// function getData(value:any){
//     console.log(value)
// }
//局限性  只能传入特定的类型
//any 放弃了类型检查
//既然有类型检查，又想传想传什么就传什么
//任意类型：任意，类型检查
/* function getData<T>(value:T){
    console.log(value)
}
getData<string>("hello")
getData<number>(113); */

class Person<T>{
    print(msg:T){
        console.log(msg)
    }
}
class Student{
    name:string;
    age:number;
    constructor(name:string,age:number){
        this.name=name;
        this.age=age;
    }
}
var p=new Student("cheng",20);
var son=new Person<string>();
son.print("hello")
var li=new Person<Student>();
li.print(p)